<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
	<title>Skeleton 骨架屏</title>
	<link rel="stylesheet" href="../static/css/element2.css">
	<script src="../static/js/vue.global.prod.js"></script>
	<script src="../static/js/element-plue2.js"></script>
	
	<link rel="stylesheet" href="../static/css/com.css">
<style type="text/css">
.r-button{
	float: right;
}
.el-skeleton{
	margin-left: -10px;
}
</style>
</head>
<body>
<div id="app" class="">
	<el-divider content-position="left">基础用法</el-divider><!-- =============================================================== -->
	<p class="desc">在需要等待加载内容的位置设置一个骨架屏，某些场景下比 Loading 的视觉效果更好。</p>
	<div style="width: 500px;">
		<el-skeleton></el-skeleton>
		<br />
		<el-skeleton style="--el-skeleton-circle-size: 100px">
			<template #template>
				<el-skeleton-item variant="circle"></el-skeleton-item>
			</template>
		</el-skeleton>
	</div>
	
	
	<el-divider content-position="left">更多参数</el-divider><!-- =============================================================== -->
	<p class="desc">可以配置骨架屏段落数量，以便更接近真实渲染效果。显示的数量会比传入的数量多 1，首行会被渲染一个长度 33% 的段首。</p>
	<div style="width: 500px;">
		<el-skeleton :rows="5"></el-skeleton>
	</div>
	
	<el-divider content-position="left">动画效果</el-divider><!-- =============================================================== -->
	<p class="desc">我们提供了一个开关标志，表明是否显示加载动画， 调用 animated 如果真真是这样，所有的 el-skeleton 的子节点将显示动画。</p>
	<div style="width: 500px;">
		<el-skeleton :rows="5" animated></el-skeleton>
	</div>
	
	<el-divider content-position="left">自定义样式</el-divider><!-- =============================================================== -->
	<p class="desc">Element Plus 提供的排版模式有时候并不满足要求，当您想要用自己定义的模板时，可以通过一个具名 Slot template 来自己设定模板。</p>
	<p class="desc">我们提供了不同的模板单元可供使用，具体可选值请看 API 详细描述。 另外，在构建您自己自定义的骨架时，您应该尽可能更接近于真正的DOM。 避免DOM因高度差而发生抖动。</p>
	<el-skeleton style="width: 240px">
		<template #template>
			<el-skeleton-item variant="image" style="width: 240px; height: 240px"></el-skeleton-item>
			<div style="padding: 14px">
				<el-skeleton-item variant="p" style="width: 50%"></el-skeleton-item>
				<div style="display: flex; align-items: center; justify-items: space-between;">
					<el-skeleton-item variant="text" style="margin-right: 16px"></el-skeleton-item>
					<el-skeleton-item variant="text" style="width: 30%"></el-skeleton-item>
				</div>
			</div>
		</template>
	</el-skeleton>
	
	<el-divider content-position="left">加载状态</el-divider><!-- =============================================================== -->
	<p class="desc">当 Loading 结束之后，我们往往需要显示真实的 UI， 可以通过 loading 属性的值来控制是否显示加载后的 DOM。 也可以通过具名插槽 default 来构建 loading 结束之后需要展示的真实 DOM 元素结构。</p>
	<label style="margin-right: 16px">Switch Loading</label>
	<el-switch v-model="loading"></el-switch>
	
	<el-skeleton style="width: 240px;margin-left: 0;" :loading="loading" animated>
		<template #template>
			<el-skeleton-item variant="image" style="width: 240px; height: 240px"></el-skeleton-item>
			<div style="padding: 14px">
				<el-skeleton-item variant="h3" style="width: 50%"></el-skeleton-item>
				<div style="display: flex; align-items: center; justify-items: space-between; margin-top: 16px; height: 16px;">
					<el-skeleton-item variant="text" style="margin-right: 16px"></el-skeleton-item>
					<el-skeleton-item variant="text" style="width: 30%"></el-skeleton-item>
				</div>
			</div>
		</template>
		<template #default>
			<el-card :body-style="{ padding: '0px', marginBottom: '1px' }" style="width: 240px;">
				<img src="https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" style="width: 240px;" class="image" />
				<div style="padding: 14px">
					<span>Delicious hamburger</span>
					<div class="bottom card-header" style="margin-top: 4px;">
						<span class="time">2022-12-13</span>
						<el-button size="small" class="r-button">按钮</el-button>
					</div>
				</div>
			</el-card>
		</template>
	</el-skeleton>
	
	<el-divider content-position="left">防止渲染抖动</el-divider><!-- =============================================================== -->
	<p class="desc">有的时候，API 的请求回来的特别快，往往骨架占位刚刚被渲染，真实的数据就已经回来了，用户的界面会突然一闪， 此时为了避免这种情况，就需要通过 throttle 属性来避免这个问题。</p>
	<p class="desc">throttle	渲染延迟（以毫秒为单位）【不建议使用】</p>
	<el-space direction="vertical" alignment="flex-start">
		<label style="margin-right: 16px">Switch Loading</label>
		<el-switch v-model="loading"></el-switch>
		
		<el-skeleton style="width: 240px;margin-left: 0;" :loading="loading" animated :throttle="50">
			<template #template>
				<el-skeleton-item variant="image" style="width: 240px; height: 240px"></el-skeleton-item>
				<div style="padding: 14px">
					<el-skeleton-item variant="h3" style="width: 50%"></el-skeleton-item>
					<div style="display: flex; align-items: center; justify-items: space-between; margin-top: 16px; height: 16px;">
						<el-skeleton-item variant="text" style="margin-right: 16px"></el-skeleton-item>
						<el-skeleton-item variant="text" style="width: 30%"></el-skeleton-item>
					</div>
				</div>
			</template>
			<template #default>
				<el-card :body-style="{ padding: '0px', marginBottom: '1px' }" style="width: 240px;">
					<img src="https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png" style="width: 240px;" class="image" />
					<div style="padding: 14px">
						<span>Delicious hamburger</span>
						<div class="bottom card-header" style="margin-top: 4px;">
							<span class="time">2022-12-14</span>
							<el-button size="small" class="r-button">按钮</el-button>
						</div>
					</div>
				</el-card>
			</template>
		</el-skeleton>
	</el-space>
	
	<el-divider content-position="left">渲染多条数据</el-divider><!-- =============================================================== -->
	<p class="desc">大多时候, 骨架屏都被用来渲染列表, 当我们需要在从服务器获取数据的时候来渲染一个假的 UI。 利用 count 这个属性就能控制渲染多少条假的数据在页面上</p>
	<p class="desc">实测发现，不用count属性还好处理一些</p>
	<div style="margin-bottom: 12px;"><el-button @click="setLoading">点击重新加载</el-button></div>
	<el-skeleton :loading="loading" animated :count="1">
		<template #template>
			<el-row :gutter="20">
				<el-col v-for="(o, index) in 3" :key="o" :span="4" :span="8">
					<el-skeleton-item variant="image" style="width: 100%; height: 270px"></el-skeleton-item>
					<div style="padding: 14px">
						<el-skeleton-item variant="h3" style="width: 100%"></el-skeleton-item>
						<div style="display: flex; align-items: center; justify-items: space-between; margin-top: 16px; height: 16px;">
							<el-skeleton-item variant="text" style="margin-right: 16px"></el-skeleton-item>
							<el-skeleton-item variant="text" style="width: 30%"></el-skeleton-item>
						</div>
					</div>
				</el-col>
			</el-row>
		</template>
		<template #default>
			<el-row :gutter="20" style="width: 100%;">
				<el-col v-for="item in lists" :key="item.name" :span="4" :span="8">
					<el-image style="width: 100%; height: 270px" :src="item.imgUrl" fit="fill"></el-image>
					<div style="padding: 14px">
						<span>{{ item.name }}</span>
						<div class="bottom card-header" style="margin-top: 8px;">
							<span class="time">2022-12-13</span>
							<el-button size="small" class="r-button">按钮</el-button>
						</div>
					</div>
				</el-col>
			</el-row>
		</template>
	</el-skeleton>
	
	
</div>

</body>
<script>
const Main = {
	data() {
		return {
			loading: true,
			lists: [
				{imgUrl: 'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg', name: 'Deer', },
				{imgUrl: 'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg', name: 'Horse', },
				{imgUrl: 'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg', name: 'Mountain Lion', },
			],
		}
	},
	methods:{
		setLoading(par){
			this.loading = true;
			setTimeout(()=>{
				this.loading = false;
			}, 500);
		},
	}
}

const app = Vue.createApp(Main);
app.use(ElementPlus);
let vm = app.mount("#app");
</script>
</html>